﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAO;
using System.Net.Mail;
using System.Text;


namespace WEB
{
    public partial class fmSubmeter : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                onload();
            }
        }


        #region Objetos
        public class horarioTemp
        {
            public string numero { get; set; }
        }
        #endregion

        #region Funçoes
        public void onload()
        {
            try
            {
                List<string> keys = new List<string>(Request.QueryString.AllKeys);

                string eventoAlias;

                if (keys.Count > 0)
                {
                    eventoAlias = Request.QueryString[0];

                    Evento eventoEcontrado = EventoDAO.Selecionar(eventoAlias);

                    if (eventoEcontrado != null)
                    {
                        Session["evento"] = eventoEcontrado;

                        DepartamentoDAO.Listar(ddlDepartamento, eventoEcontrado.ID);
                        CategoriaDAO.Listar(ddlCategoria, eventoEcontrado.ID);

                        DateTime dtInicial = eventoEcontrado.dtHoraAbertura.Value;
                        DateTime dtFinal = eventoEcontrado.dtHoraEncerramento.Value;

                        int qntDias = dtFinal.Subtract(dtInicial).Days;

                        for (int i = 0; i < qntDias; i++)
                        {
                            ListItem item = new ListItem();
                            item.Value = (i + 1).ToString();
                            item.Text = (i + 1).ToString();

                            ddlQTDEncontros.Items.Add(item);
                            ddlQTDEncontros.DataBind();
                        }

                        ddlQTDEncontros_SelectedIndexChanged();
                    }
                    else
                    {
                        Response.Write("Evento não localizado!");
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            finally
            {
                mtv.SetActiveView(viewInicial);
            }
        }

        public void carregaHorario(Evento eventoEncontrado)
        {
            try
            {
                DateTime dtInicial = eventoEncontrado.dtHoraAbertura.Value;
                DateTime dtFinal = eventoEncontrado.dtHoraEncerramento.Value;


                List<horarioTemp> encontros = new List<horarioTemp>();
                List<ListItem> dias = new List<ListItem>();

                int qntEncontro = int.Parse(ddlQTDEncontros.SelectedValue);

                for (int i = 0; i < qntEncontro; i++)
                {
                    horarioTemp temp = new horarioTemp();
                    temp.numero = (i + 1).ToString();

                    encontros.Add(temp);
                }

                rptHorarios.DataSource = encontros;
                rptHorarios.DataBind();

                int qntDias = dtFinal.Subtract(dtInicial).Days;

                for (int i = 0; i < qntDias; i++)
                {
                    ListItem item = new ListItem();
                    item.Value = dtInicial.AddDays(i).Day.ToString();
                    item.Text = dtInicial.AddDays(i).Day.ToString();

                    dias.Add(item);
                }

                foreach (RepeaterItem item in rptHorarios.Items)
                {
                    DropDownList ddlDia = (DropDownList)item.FindControl("ddlDia");
                    foreach (ListItem dia in dias)
                    {
                        ddlDia.Items.Add(dia);
                    }
                    ddlDia.DataBind();
                }

            }
            catch (Exception)
            {
                throw;
            }
        }

        public void submeter()
        {
            lblSucesso.Text = string.Empty;
            lblAviso.Text = string.Empty;
            lblErro.Text = string.Empty;

            try
            {
                if (Session["evento"] != null)
                {
                    Evento evento = (Evento)Session["evento"];

                    Papel papel = PapelDAO.Selecionar(evento.ID, "Inscrito");


                    Pessoa pessoa = new Pessoa();

                    if (txtNomeCompleto.Enabled == true)
                    {
                        if (txtConfirmarSenha.Text != txtSenha.Text)
                            throw new Exception("Senhas não conferem!");

                        pessoa.eventoID = evento.ID;
                        pessoa.papelID = papel.ID;
                        pessoa.nomeCompleto = txtNomeCompleto.Text.Trim();
                        pessoa.email = txtEmail.Text.Trim();
                        pessoa.telefone = txtTelefone.Text;
                        pessoa.senha = txtSenha.Text;
                    }

                    else
                    {
                        pessoa = PessoaDAO.Selecionar(evento.ID, txtEmail.Text.Trim());

                        if (pessoa != null)
                        {
                            if (pessoa.senha != txtSenha.Text)
                                throw new Exception("E-mail e senha não conferem!");
                        }
                    }

                    Atividade atividade = new Atividade();

                    atividade.eventoID = evento.ID;
                    atividade.departamentoID = int.Parse(ddlDepartamento.SelectedValue.ToString());
                    atividade.categoriaID = int.Parse(ddlCategoria.SelectedValue.ToString());

                    atividade.totalVagas = int.Parse(txtTotalVagas.Text);
                    atividade.titulo = txtTitulo.Text.Trim();
                    atividade.prerequisitos = txtPreRequisitos.Text.Trim();
                    atividade.descricao = txtDescricao.Text.Trim();


                    AtividadeDAO.Submeter(pessoa, atividade);


                    AtividadeStatu status = AtividadeStatusDAO.Selecionar(pessoa.eventoID, "Submetida");


                    if (status != null)
                    {
                        AtividadeHistorico historico = new AtividadeHistorico();
                        historico.eventoID = pessoa.eventoID;
                        historico.pessoaID = pessoa.ID;
                        historico.atividadeID = atividade.ID;
                        historico.atividadeStatusID = status.ID;

                        historico.descricao = "Atividade Submetida.";
                        historico.data = GetDate_doBanco();

                        AtividadeHistoricoDAO.Salvar(historico);
                    }

                    montaEmail();
                    montaEmailDeCadastro();

                    lblSucesso.Text = "Atividade submetida com sucesso!";

                    mtv.SetActiveView(viewSucesso);
                }

            }
            catch (Exception)
            {
                throw;
            }
        }

        public void EnviarEmail(string pRemetente, string pDestino, string pAssunto, string pCorpo)
        {
            MailMessage message = new MailMessage(pRemetente, pDestino, pAssunto, pCorpo);
            message.BodyEncoding = System.Text.Encoding.UTF8;


            message.IsBodyHtml = true; //Para mensagens com corpo em HTML - true. Para plain-text - false
            message.SubjectEncoding = System.Text.Encoding.UTF8;

            SmtpClient client = new SmtpClient("smtp.adosweb.com.br"); //IIS necessita está configurado - configure de acordo com as informações do provedor

            System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("webmail@adosweb.com.br", "141516"); //Aqui você configura seu login e senha
            client.UseDefaultCredentials = false;
            client.Credentials = SMTPUserInfo;
            client.Port = 587; //Setar a porta que o provedor usa. Seguir orientações dele.
            client.EnableSsl = false; //Verificar se ele exige conexão SSL - se sim, true. Caso contrário, false.


            try
            {
                client.Send(message);
            }
            catch (System.Exception erro)
            {
               throw new Exception("Erro ao enviar e-mail.  O erro foi: " + erro.Message);
            }
        }

        public void montaEmailDeCadastro()
        {
            try
            {
                Evento evento = (Evento)Session["evento"];

                String Remetente = "webmail@adosweb.com.br";
                String Destino = txtEmail.Text;
                String Assunto =  evento.titulo + " - Confirmação de Inscrição" ;

                StringBuilder sbCorpo = new StringBuilder();
                sbCorpo.Append("<h1>Confirmação de Inscrição - " + evento.titulo + "</h1>");

                sbCorpo.Append("Inscrição realizada em: " + DateTime.Now.Date.ToString("dd/MM/yyyy") + " às " + DateTime.Now.Hour + "h " + DateTime.Now.Minute + "min " + DateTime.Now.Second + "seg");

                sbCorpo.Append("<b><br /><br />" + evento.titulo + "<br /></b>");

                sbCorpo.Append("<b><br /><br />Seus Dados:<br /></b>");

                sbCorpo.Append("<b>Nome:</b> " + txtNomeCompleto.Text);
                sbCorpo.Append("<br /><b>Email:</b> " + txtEmail.Text);
                sbCorpo.Append("<br /><b>Telefone:</b> " + txtTelefone.Text);
                sbCorpo.Append("<br /><b>Senha para o primeiro acesso:</b> " + "123123");

                sbCorpo.Append("<br /> <br />Importante! Clique <a href='www.adosweb.com.br/gead?" + evento.alias + "'> AQUI </a> e acesse a sua conta para modificar a senha temporária!");
                String Corpo = sbCorpo.ToString();

                EnviarEmail(Remetente, Destino, Assunto, Corpo);

            }
            catch (Exception exe)
            {
                lblErro.Text = "Falha ao tentar enviar Mensagem. Por Favor tente novamente. <br /><br /> ERRO:<br />" + exe.Message.ToString();
            }

        }
        public void montaEmail()
        {
            try
            {
                Evento evento = (Evento)Session["evento"];

                String Remetente = "webmail@adosweb.com.br";
                String Destino = txtEmail.Text;
                // Assunto = "Formulario de Submissão de Atividade - www.SistemaDoTCC.com.br";
                String Assunto = evento.titulo + " - Submissão de Atividade";

                StringBuilder sbCorpo = new StringBuilder();
                sbCorpo.Append("<h1>Confirmação de Submissão de Atividade</h1>");

                sbCorpo.Append("Atividade Submetida em: " + DateTime.Now.Date.ToString("dd/MM/yyyy") + " às " + DateTime.Now.Hour + "h " + DateTime.Now.Minute + "min " + DateTime.Now.Second + "seg");
                sbCorpo.Append("<b><br /><br />Dados do Autor:<br /></b>");

                sbCorpo.Append("<b>Nome:</b> " + txtNomeCompleto.Text);
                sbCorpo.Append("<br /><b>Email:</b> " + txtEmail.Text);
                sbCorpo.Append("<br /><b>Telefone:</b> " + txtTelefone.Text);


                sbCorpo.Append("<b><br /><br />Dados da Atividade:<br /></b>");

                sbCorpo.Append("<b>Evento:</b> " + ((Evento)Session["evento"]).titulo);
                sbCorpo.Append("<br /><b>Departamento:</b> " + ddlDepartamento.SelectedItem.Text);
                sbCorpo.Append("<br /><b>Categoria:</b> " + ddlCategoria.SelectedItem.Text);
                sbCorpo.Append("<br /><b>Título:</b> " + txtTitulo.Text);
                sbCorpo.Append("<br /><b>Pré-Requisitos:</b> " + txtPreRequisitos.Text);
                sbCorpo.Append("<br /><b>Descrição:</b> " + txtDescricao.Text);



                sbCorpo.Append("<br /> <br />Sua atividade foi submetida com sucesso e entrará em processo de avaliação! Fique atento ao resultado!");
                String Corpo = sbCorpo.ToString();

                EnviarEmail(Remetente, Destino, Assunto, Corpo);

            }
            catch (Exception exe)
            {
                lblErro.Text = "Falha ao tentar enviar Mensagem. Por Favor tente novamente. <br /><br /> ERRO:<br />" + exe.Message.ToString();
            }
        }


        public void localizaPessoa()
        {
            try
            {
                Evento evento = (Evento)Session["evento"];
                Pessoa objRetornado = PessoaDAO.Selecionar(evento.ID, txtEmail.Text.Trim());

                if (objRetornado != null)
                {
                    txtNomeCompleto.Text = objRetornado.nomeCompleto;
                    txtNomeCompleto.ReadOnly = true;
                    txtNomeCompleto.Enabled = false;

                    txtTelefone.Text = objRetornado.telefone;
                    txtTelefone.ReadOnly = true;
                    txtTelefone.Enabled = false;
                    div_confirmarSenha.Visible = false;
                }
                else
                {
                    txtNomeCompleto.Text = string.Empty;
                    txtNomeCompleto.ReadOnly = false;
                    txtNomeCompleto.Enabled = true;

                    txtTelefone.Text = string.Empty;
                    txtTelefone.ReadOnly = false;
                    txtTelefone.Enabled = true;

                    div_confirmarSenha.Visible = true;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region Eventos do formulario
        protected void btmSubmeter_Click(object sender, EventArgs e)
        {
            try
            {
                submeter();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }
        public void ddlQTDEncontros_SelectedIndexChanged()
        {
            try
            {
                if (Session["evento"] != null)
                {
                    Evento evento = (Evento)Session["evento"];
                    carregaHorario(evento);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        protected void ddlQTDEncontros_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                ddlQTDEncontros_SelectedIndexChanged();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }

        protected void txtEmail_OnTextChanged(object sender, EventArgs e)
        {
            try
            {
                localizaPessoa();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }
        #endregion
    }
}